package club.mzywucai.blog.file_system.mapper;

import club.mzywucai.blog.file_system.pojo.po.FileCategoryTreePo;
import club.mzywucai.blog.file_system.pojo.po.FileRatioPo;
import club.mzywucai.blog.file_system.pojo.vo.FileBasicVo;
import club.mzywucai.blog.file_system.pojo.vo.FileDetailVo;
import club.mzywucai.blog.file_system.pojo.vo.RecentIUploadFileVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author mzywucai
 * @Description 文件相关信息的Mapper
 * @date 2019/2/11
 */
public interface FileInformationMapper {
    /**
     * @Description 获取最近上传的文件的信息（获取前18条）
     * @author mzywucai
     * @time 2019-02-11
     * @see
     * @return   java.util.List<club.mzywucai.blog.file_system.pojo.vo.RecentIUploadFileVo>
     * @params  []
     */
    List<RecentIUploadFileVo> getRecentIUploadFileVoList();

    /**
     * @Description 通过文件的唯一ID，查询它的详情，展示到页面上。
     * @author mzywucai
     * @time 2019-02-11
     * @see
     * @return   club.mzywucai.blog.file_system.pojo.vo.FileDetailVo
     * @params  [fileInfoId]
     */
    FileDetailVo getFileDetailVoByFileInfoId(@Param("file_info_id") long fileInfoId);

    /**
     * @Description 查询各大类别文件占比，使用Long，这样可以注入null，方便动态SQL判断。
     * @author mzywucai
     * @time 2019-02-13
     * @see 
     * @return   java.util.List<club.mzywucai.blog.file_system.pojo.po.FileRatioPo>
     * @params  [userId]
     */    
    List<FileRatioPo> getFileRatio(@Param("user_id") Long userId);

    /**
     * @Description 获取右下面板表格需要的文件简略信息
     * @author mzywucai
     * @time 2019-02-13
     * @see 
     * @return   java.util.List<club.mzywucai.blog.file_system.pojo.vo.FileBasicVo>
     * @params  []
     */
    List<FileBasicVo> getFileBasic(@Param("user_id") Long userId,
                                   @Param("file_category_list") List<Long> fileCategoryList,
                                   @Param("order_by") int orderBy,
                                   @Param("page_begin") int pageBegin,
                                   @Param("page_size") int pageSize,
                                   @Param("condition") String condition);

    /**
     * @Description 获取右下面板表格需要的文件简略信息
     * @author mzywucai
     * @time 2019-02-13
     * @see
     * @return   java.util.List<club.mzywucai.blog.file_system.pojo.vo.FileBasicVo>
     * @params  []
     */
    int getFileBasicCount(@Param("user_id") Long userId,
                                   @Param("file_category_list") List<Long> fileCategoryList, @Param("condition") String condition);

    /**
     * @Description 获取当前用户拥有的文件的ID的list
     * @author mzywucai
     * @time 2019-02-13
     * @see 
     * @return   java.util.List<java.lang.Long>
     * @params  [userId]
     */
    List<Long> getOwnFileList(@Param("user_id") long userId);

    /**
     * @Description 删除文件
     * @author mzywucai
     * @time 2019-02-13
     * @see
     * @return   void
     * @params  [fileInfoId]
     */
    void delFile(@Param("file_info_id") long fileInfoId);

    /**
     * @Description 获取文件类别树
     * @author mzywucai
     * @time 2019-02-13
     * @see 
     * @return   club.mzywucai.blog.file_system.pojo.po.FileCategoryTreePo
     * @params  []
     */
    List<FileCategoryTreePo> getFileCategoryTree();
}
